export default {
  namespaced: true,

  state: {
    cartItems: uni.getStorageSync('cart') || []
  },

  getters: {
    // 统计购物车选中的商品总价
    checkedAmount(state) {
      return state.cartItems.reduce((sum, item) => {
        if (item.goods_state) {
          return sum + item.goods_count * item.goods_price
        } else {
          return sum
        }
      }, 0)
    },
    // 统计购物车选中的商品总数
    checkedTotal(state) {
      return state.cartItems.reduce((sum, item) => {
        if (item.goods_state) {
          return sum + item.goods_count
        } else {
          return sum
        }
      }, 0)
    },
    // 统计购物车的商品总数
    total(state) {
      return state.cartItems.reduce((prev, item) => prev + item.goods_count, 0)
    }
  },

  mutations: {
    // 点击全选框事件
    updateAllState(state, isAllchecked) {
      state.cartItems.forEach(item => {
        item.goods_state = isAllchecked
      })
      uni.setStorageSync('cart', state.cartItems)
    },
    // 删除购物车商品
    removeGoods(state, item) {
      // filter 过滤
      state.cartItems = state.cartItems.filter(
        v => v.goods_id !== item.goods_id
      )
      uni.setStorageSync('cart', state.cartItems)
    },
    // 修改购物车商品数量
    updateCount(state, { product, num }) {
      // 1. 找到指定商品
      const existedItem = state.cartItems.find(
        item => item.goods_id === product.goods_id
      )
      // 2. 修改商品数量
      if (existedItem) {
        existedItem.goods_count = num
        // 3. 持久化存储
        uni.setStorageSync('cart', state.cartItems)
      }
    },
    // 更新购物车选中状态
    updateState(state, item) {
      // 1. 先找到当前的商品 --- find
      const existedItem = state.cartItems.find(
        v => v.goods_id === item.goods_id
      )
      if (existedItem) {
        // 2. 修改当前商品的选中状态 goods_state 取反
        existedItem.goods_state = !existedItem.goods_state
        // 3. 持久化存储
        uni.setStorageSync('cart', state.cartItems)
      }
    },
    // 添加商品至购物车
    addToCart(state, item) {
      // 判断商品是否存在于列表中
      // 如果存在, 直接修改商品的数量 + 1
      // 如果不存在, 添加到列表中
      const existedItem = state.cartItems.find(
        ele => ele.goods_id === item.goods_id
      )
      if (existedItem) {
        // 存在 -> 修改数量
        existedItem.goods_count++
      } else {
        // 不存在 -> 添加到列表中
        state.cartItems.push(item)
      }
      // 持久化存储
      uni.setStorageSync('cart', state.cartItems)
    }
  },

  actions: {}
}
